package estadistec.logica.gestores;

import estadistec.excepciones.ExcepcionNombreSinDefinir;

/** 
 * Clase que representa a gestores que son "manejados". Se hace esta
 * diferenciación para colocar al SuperGestor en una capa distinta,
 * de manera que no pueda ser "manejado" por nadie. Todos los demás gestores,
 * como dependen de manera directa o indirecta del SuperGestor, heredan
 * de esta clase.
 *
 * 2009-Nov-13: Se agrega una referencia al Padre y un método para
 * obtenerlo.
 */
public abstract class GestorManejable<M extends IManejable> 
	extends Gestor<M> implements IManejable 
{

	/**
	 * Guarda la llave que es el Id de esta instancia. Sirve para 
	 * implementar a IManejable.
	 */
	protected Long _llave;

	/**
	 * Retorna la llave de la instancia.
	 */
	public Long getLlave() {
		return this._llave;
	}

	/** 
	 * Guarda el nombre requerido por la Interfaz IManejable.
	 */
	protected String _nombre;

	/** 
	 * Devuelve el nombre.
	 */
	public String getNombre() {
		return this._nombre;
	}

	/** 
	 * Define un nuevo nombre.
	 */
	public void setNombre(String nombre) {
		assert(verificarSintaxisNombre(nombre));
		if (this._nombre == nombre)
			return;
		assert(!this.getGestor().existeManejableXNombre(nombre));
		this._nombre = new String(nombre);
	}
}
